package com.example.keshe.Dao;

import java.util.List;

/**
 * ClothingDao 接口定义了对服装数据的基本操作。
 *
 * @param <T> 服装实体类型
 */
import java.util.List;

/**
 * 服装数据访问接口。
 *
 * @param <T> 服装实体类型
 */
public interface ClothingDao<T> {

    /**
     * 将单条服装数据插入数据库。
     *
     * @param clothing 服装实体
     * @return 插入成功返回 1，否则返回 0
     * @throws Exception 插入操作可能抛出异常
     */
    int insert(T clothing) throws Exception;

    /**
     * 根据服装信息修改数据。
     *
     * @param clothing 服装实体
     * @return 更新成功返回 1，否则返回 0
     * @throws Exception 更新操作可能抛出异常
     */
    int updateByPrimaryKey(T clothing) throws Exception;

    /**
     * 根据服装ID删除单条数据。
     *
     * @param clothingId 服装ID
     * @return 删除成功返回 1，否则返回 0
     * @throws Exception 删除操作可能抛出异常
     */
    int deleteByPrimaryKey(String clothingId) throws Exception;

    /**
     * 分页查询服装数据。
     *
     * @param pageIndex 当前页码
     * @param pageSize  每页记录数
     * @return 服装数据列表
     * @throws Exception 查询操作可能抛出异常
     */
    List<T> selectByPage(int pageIndex, int pageSize) throws Exception;

    /**
     * 获取总记录数。
     *
     * @return 总记录数
     * @throws Exception 查询操作可能抛出异常
     */
    int getTotalRecords() throws Exception;

    /**
     * 检查服装ID是否存在。
     *
     * @param clothingId 服装ID
     * @return 存在返回 true，否则返回 false
     * @throws Exception 查询操作可能抛出异常
     */
    boolean isDuplicateClothingId(String clothingId) throws Exception;

    /**
     * 检查是否为新服装。
     *
     * @param clothingId 服装ID
     * @param name       服装名称
     * @param brand      服装品牌
     * @param size       服装尺寸
     * @param color      服装颜色
     * @param season     服装使用季节
     * @param category   服装类别
     * @return 是新服装返回 true，否则返回 false
     * @throws Exception 查询操作可能抛出异常
     */
    boolean isDuplicateClothing(String clothingId, String name, String brand, String size, String color, String season, String category) throws Exception;

    /**
     * 模糊查询服装数据。
     *
     * @param clothingId 服装ID
     * @param name       服装名称
     * @param brand      服装品牌
     * @param size       服装尺寸
     * @param price      服装价格
     * @param quantity   服装数量
     * @param color      服装颜色
     * @param season     使用季节
     * @param category   服装类别
     * @return 满足条件的服装数据列表
     * @throws Exception 查询操作可能抛出异常
     */
    List<T> queryClothing(String clothingId, String name, String brand, String size, String price, String quantity, String color, String season, String category) throws Exception;
}
